import axios from "axios";

// 创建 axios 实例
const service = axios.create({
  baseURL: "https://aimk.chinacpt.com:8004", //  API 基础 URL
//   baseURL: "http://192.168.9.141:8004", //  API 基础 URL
  timeout: 5000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 检查是否需要添加 token，排除登录和注册接口
    if (config.url !== "/login" && config.url !== "/register") {
      const token = localStorage.getItem("token");
      if (token) {
        config.headers["Authorization"] = `Bearer ${token}`;
      }
    }
    return config;
  },
  (error) => {
    console.error("请求错误:", error);
    return Promise.reject(error);
  }
);
function unescapeUnicode(str) {
  return str.replace(/\\u([\d\w]{4})/gi, (match, grp) => {
      return String.fromCharCode(parseInt(grp, 16));
  });
}

// 响应拦截器,这个拦截器会在每次接收到响应时自动解码所有的字符串字段，确保你在任何地方使用这些数据时都是解码后的
axios.interceptors.response.use(
  (response) => {
    if (response.data && typeof response.data === "object") {
      const decodedData = JSON.parse(
        JSON.stringify(response.data),
        (key, value) => {
          if (typeof value === "string") {
            return unescapeUnicode(value);
          }
          return value;
        }
      );
      return { ...response, data: decodedData };
    }
    return response;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 定义登录接口
export function login(data) {
  return service({
    url: "/login", // 你的登录接口 URL
    method: "post",
    data,
  })
    .then((response) => {
      // 打印完整的响应对象
      console.log("登录响应:", response,1111);

      // 尝试访问 access_token 之前，先检查 response.data 是否存在
      if (response) {
        console.log("响应数据:", response);
        // 登录成功后，将 token 存储到 localStorage
        const token = response.data.access_token;
        const userId = response.data.user_id;
        const nickname = response.data.nickname;
        console.log(nickname,222)
        if (token) {
          localStorage.setItem("token", token);
          localStorage.setItem("userId", userId);
          localStorage.setItem("nickname", nickname);
          console.log(nickname, 111);
        } else {
          console.warn("响应中没有 access_token");
        }
      } else {
        console.error("响应数据是 undefined");
      }

      return response.data; // 返回响应数据
    })
    .catch((error) => {
      // 如果请求失败，也打印错误信息
      if (error.response) {
        // 请求已发出，但服务器响应的状态码不在 2xx 范围内
        console.error("登录失败，服务器返回错误信息:", error.response.data);
        console.error("登录失败，服务器返回状态码:", error.response.status);
      } else if (error.request) {
        // 请求已发出，但没有收到任何响应
        console.error("登录失败，请求已发出但没有收到响应:", error.request);
      } else {
        // 发送请求时发生了某些问题
        console.error("登录失败，发送请求时发生错误:", error.message);
      }

      return Promise.reject(error);
    });
}

// 定义注册接口
export function register(data) {
  return service({
    url: "/register", // 你的注册接口 URL
    method: "post",
    data,
  }).catch((error) => {
    console.error("注册失败:", error);
    return Promise.reject(error);
  });
}

// 定义查询地址的接口
export function getAddressByCoordinates(searchForm) {
  return service({
    url: "/get_address_by_coordinates",
    method: "post",
    data: searchForm,
  })
    .then((response) => {
      // 打印成功的响应数据
      console.log("查询地址响应:", response);

      // 返回响应数据
      return response;
    })
    .catch((error) => {
      // 处理请求错误
      if (error.response) {
        // 请求已发出，但服务器响应的状态码不在 2xx �范围内
        console.error("查询地址失败，服务器返回错误信息:", error.response.data);
        console.error("查询地址失败，服务器返回状态码:", error.response.status);
      } else if (error.request) {
        // 请求已发出，但没有收到任何响应
        console.error("查询地址失败，请求已发出但没有收到响应:", error.request);
      } else {
        // 发送请求时发生了某些问题
        console.error("查询地址失败，发送请求时发生错误:", error.message);
      }

      return Promise.reject(error);
    });
}

// 定义上传照片的接口
export function uploadPhotos(files) {
  console.log("准备上传的文件:", files.length, 122);
  const formData = new FormData();
  files.forEach((file) => {
    formData.append(`files`, file);
  });

  return service({
    url: "/upload_photos", // 你的上传照片接口 URL
    method: "post",
    data: formData,
    timeout:20000,
    headers: {
      "Content-Type": "multipart/form-data",
    },
  })
    .then((response) => {
      // 打印成功的响应数据
      console.log("上传照片成功:", response.data);

      // 返回响应数据
      return response.data;
    })
    .catch((error) => {
      // 处理请求错误
      if (error.response) {
        // 请求已发出，但服务器响应的状态码不在 2xx 范围内
        console.error("上传照片失败，服务器返回错误信息:", error.response.data);
        console.error("上传照片失败，服务器返回状态码:", error.response.status);
      } else if (error.request) {
        // 请求已发出，但没有收到任何响应
        console.error("上传照片失败，请求已发出但没有收到响应:", error.request);
      } else {
        // 发送请求时发生了某些问题
        console.error("上传照片失败，发送请求时发生错误:", error.message);
      }

      return Promise.reject(error);
    });
}

// 添加店铺接口
export function addStore(data) {
  return service({
    url: "/add_store", // 添加店铺接口的 URL
    method: "post",
    data,
    headers: {
      "Content-Type": "application/json; charset=utf-8", // 设置字符编码为 utf-8
    },
  }).catch((error) => {
    console.error("添加失败:", error);
    return Promise.reject(error);
  });
}

// 查询本人店铺信息接口
export function query_store(data) {
  return service({
    url: "/query_store", // 添加店铺接口的 URL
    method: "post",
    data,
    headers: {
      "Content-Type": "application/json; charset=utf-8", // 设置字符编码为 utf-8
    },
  })
    .then((response) => {
      // 打印成功的响应数据
      console.log("获取用户信息成功:", response);

      // 返回响应数据
      return response.data.data;
    })
    .catch((error) => {
      console.error("添加失败:", error);
      return Promise.reject(error);
    });
}
